Improving database performance is an ongoing issue for database administrators. One performance improvement technique concerns improving query response time. Query response time may be improved by different techniques including, for example, optimizing queries, creating indexes, creating summaries, and so on. Appropriate use of indexes can improve access paths to data and thus can improve query performance. For example, an appropriate index can enhance SQL (structured query language) statement performance by reducing the need for full table scans. However, indexes may be costly. Creating an index consumes processor cycles, storing an index consumes memory, storing an index consumed disk space, and maintaining (e.g., updating) an index consumes processor cycles. Thus, a database administrator (dbadmin) may carefully consider which indexes to create, store, and/or maintain.
Making decisions concerning indexes is complicated by the realities of the database environment. For example, dbadmins may have limited resources (e.g., memory, time, processor cycles, disk space) available. Therefore a dbadmin may not be able to create an unlimited or even large number of indexes, materialized views, and so on. By way of illustration, the dbadmin may not have enough memory to store all possible indexes that would improve query performance. Similarly, the dbadmin may not have enough processor cycles to maintain all possible indexes that would improve query performance. Thus, a dbadmin may be forced to select indexes to create and maintain.
Automated tools may help the dbadmin. Conventionally, an automated tool may generate candidate access structures (e.g., indexes, materialized views, summaries) from which a dbadmin may select. Additionally, an automated tool may provide candidate access structures to abandon. These decisions may be based, for example, on constraints like memory consumed, processor cycles consumed, disk space consumed, and so on. However, considering access structure costs and/or benefits in isolation may provide a sub-optimal solution for selecting access structures to create, maintain, and/or abandon.